package com.neusoft.nepa.controller;

import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.scene.layout.Background;
import javafx.scene.layout.BackgroundFill;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.paint.CycleMethod;
import javafx.scene.paint.LinearGradient;
import javafx.scene.paint.Stop;
import javafx.util.Duration;

public class BackgroundPane2 extends StackPane {
    // 动画状态标记
    private boolean isAnimationRunning = false;
    private Timeline animation;

    // 目标静态渐变（最终样式）
    private LinearGradient targetGradient;

    public BackgroundPane2() {
        // 初始化目标静态渐变（从左到右：白→浅青绿→浅天蓝）
        targetGradient = new LinearGradient(
                0, 0,   // 起点（左-上）
                1, 0,   // 终点（右-上）
                true,
                CycleMethod.NO_CYCLE,
                new Stop(0, Color.WHITE),
                new Stop(0.4, Color.rgb(192, 245, 216)),
                new Stop(1, Color.rgb(135, 232, 245))
        );

        // 初始状态：全灰色背景
        setBackground(new Background(
                new BackgroundFill(Color.GRAY, null, null)
        ));

        // 创建颜色涌入动画
        createInflowAnimation();

        // 启动动画
        startAnimation();
    }

    private void createInflowAnimation() {
        animation = new Timeline();
        animation.setCycleCount(1); // 只播放一次

        // 动画持续时间（例如2秒）
        Duration duration = Duration.seconds(2);

        // 定义动画关键帧：从右侧开始向左涌入渐变色
        KeyFrame start = new KeyFrame(Duration.ZERO, event -> {
            // 初始状态：渐变起点在右侧，终点在更右侧（仅右侧小部分可见）
            LinearGradient initialGradient = new LinearGradient(
                    1, 0,    // 起点在右侧
                    1.5, 0,  // 终点在右侧外
                    true,
                    CycleMethod.NO_CYCLE,
                    new Stop(0, Color.WHITE),
                    new Stop(0.4, Color.rgb(192, 245, 216)),
                    new Stop(1, Color.rgb(135, 232, 245))
            );
            setBackground(new Background(
                    new BackgroundFill(initialGradient, null, null)
            ));
        });

        KeyFrame end = new KeyFrame(duration, event -> {
            // 动画结束：应用目标静态渐变
            setBackground(new Background(
                    new BackgroundFill(targetGradient, null, null)
            ));
            isAnimationRunning = false;
        });

        // 添加关键帧到时间线
        animation.getKeyFrames().addAll(start, end);
    }

    private void startAnimation() {
        if (!isAnimationRunning) {
            isAnimationRunning = true;
            animation.play();

            // 动画结束后清理资源
            animation.setOnFinished(event -> {
                // 可以在此处添加额外的清理逻辑
            });
        }
    }

    // 外部接口：手动停止动画（可选）
    public void stopAnimation() {
        if (animation != null) {
            animation.stop();
            isAnimationRunning = false;
        }
    }
}